package org.example.c2;

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

/**
 * @author liu-rui
 * @date 2020/6/8 下午2:14
 * @description 性能对比下：日期格式转换线程安全两种实现方式
 * <p>
 * 结论：DateTimeFormatter比SimpleDateFormat要快，差不多２倍
 * @since
 */
public class Demo33 {
    public static void main(String[] args) throws RunnerException {
        Options opt = new OptionsBuilder()
                // 导入要测试的类
                .include(Demo33.class.getName())
                // 预热5轮
                .warmupIterations(5)
                // 度量10轮
                .measurementIterations(10)
                .mode(Mode.Throughput)
                .forks(3)
                .build();

        new Runner(opt).run();
    }

    static ThreadLocal<SimpleDateFormat> simpleDateFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));

    @Benchmark
    public void testSimpleDateFormat() throws ParseException {
        simpleDateFormat.get().parse("2020-11-10");
    }

    @Benchmark
    public void testDateTimeFormatter() {
        LocalDate.parse("2020-11-10", DateTimeFormatter.ISO_LOCAL_DATE);
    }
}
